//package com.springboot.stelleroid.service.impl;
//
//import com.querydsl.core.types.Projections;
//import com.querydsl.core.types.dsl.Expressions;
//import com.querydsl.jpa.impl.JPAQueryFactory;
//import com.springboot.stelleroid.dto.UserDTO;
//import com.springboot.stelleroid.model.QLessonModel;
//import com.springboot.stelleroid.model.QUserModel;
//import com.springboot.stelleroid.model.UserModel;
//import com.springboot.stelleroid.repository.UserRepository;
//import com.springboot.stelleroid.service.UserService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//
//
//@Service
//public class UserServiceImpl implements UserService {
//
//    @Autowired
//    JPAQueryFactory queryFactory;
//
//    @Autowired
//    private UserRepository userRepository;
//
//
//    @Override
//    public Long update(String id, String nickName) {
//        QUserModel userModel = QUserModel.userModel;
//        // 更新
//        return queryFactory.
//                update(userModel).
//                set(userModel.nickName, nickName)
//                .where(userModel.id.eq(id)).
//                        execute();
//    }
//
//    @Override
//    public Long delete(String id) {
//        QUserModel userModel = QUserModel.userModel;
//        // 删除
//        return queryFactory.delete(userModel).where(userModel.id.eq(id)).execute();
//    }
//
//    @Override
//    public List<String> selectAllNameList() {
//        QUserModel userModel = QUserModel.userModel;
//        // 查询字段
//        return queryFactory.select(userModel.nickName).from(userModel).fetch();
//    }
//
//    @Override
//    public List<UserModel> selectAllUserModelList() {
//        QUserModel userModel = QUserModel.userModel;
//        // 查询实体
//        return queryFactory.selectFrom(userModel).fetch();
//    }
//
//
//    /**
//     * 关联查询
//     * @return
//     */
//    @Override
//    public List<UserDTO> selectAllUserDTOList() {
//        QUserModel userModel = QUserModel.userModel;
//        QLessonModel lessonModel = QLessonModel.lessonModel;
//        /**
//         *  todo  利用JPA自带分页
//         *
//         */
////        Predicate predicate = QUser.user.id.lt(10);
////        Sort sort = new Sort(new Sort.Order(Sort.Direction.DESC, "id"));
////        PageRequest pr = new PageRequest(offset, pageSize, sort);
////        return repository.findAll(predicate, pr);
//
//            //todo 分页查询单表
////        PageRequest page = PageRequest.of(1, 10, Sort.by("id"));
////        Page<UserModel> all = userRepository.findAll(page);
//
//
//      //  todo  连表查询实体并将结果封装至DTO
//        return queryFactory
//                .select(
//                        Projections.bean(UserDTO.class,
//                                userModel.nickName,
//                                userModel.age,
//                                lessonModel.startDate,
//                                lessonModel.address,
//                                lessonModel.name)
//                )
//                .from(userModel).offset(1).limit(10)
//                .leftJoin(lessonModel)
//                .on(userModel.id.eq(lessonModel.userId))
//                .fetch();
//
//
//    }
//
//    @Override
//    public List<String> selectDistinctNameList() {
//        QUserModel userModel = QUserModel.userModel;
//        // 去重查询
//        userRepository.findAll();
//        return queryFactory.selectDistinct(userModel.nickName).from(userModel).fetch();
//    }
//
//    @Override
//    public UserModel selectFirstUser() {
//        QUserModel userModel = QUserModel.userModel;
//        // 查询首个实体
//        return queryFactory.selectFrom(userModel).fetchFirst();
//    }
//
//    @Override
//    public UserModel selectUser(String id) {
//        QUserModel userModel = QUserModel.userModel;
////        // 查询单个实体，如果结果有多个，会抛`NonUniqueResultException`。
//        // todo  QSL
//       return queryFactory.
//               select(userModel).
//               from(userModel).
//               where(userModel.id.eq(id)).
//               fetchOne();
//
//       // todo 传统 JPA条件查询
//
//  /*      ExampleMatcher id1 =
//                ExampleMatcher.
//                matching().
//                withMatcher("id",
//                ExampleMatcher.GenericPropertyMatchers.exact());
//                     //   withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING);
//
//        //创建实例
//        UserModel userModel1 = new UserModel();
//
//        Example<UserModel> of = Example.of(userModel1, id1);
//
//        userRepository.findOne(of);*/
//
//    }
//
//
//    /**
//     * 聚合函数的使用的
//     * @param id
//     * @param nickName
//     * @param age
//     * @return
//     */
//    @Override
//    public String mysqlFuncDemo(String id, String nickName, int age) {
//
//        QUserModel userModel = QUserModel.userModel;
//
//        // Mysql 聚合函数示例使用
//
//        // 聚合函数-avg()
//        Double averageAge = queryFactory.select(userModel.age.avg()).from(userModel).fetchOne();
//
//        // 聚合函数-sum()
//        Integer sumAge = queryFactory.select(userModel.age.sum()).from(userModel).fetchOne();
//
//        // 聚合函数-concat()
//        String concat = queryFactory.select(userModel.nickName.concat(nickName)).from(userModel).fetchOne();
//
//        // 聚合函数-contains()
//        Boolean contains = queryFactory.select(userModel.nickName.contains(nickName)).from(userModel).where(userModel.id.eq(id)).fetchOne();
//
//        // 聚合函数-DATE_FORMAT()
//        String date = queryFactory.select(Expressions.stringTemplate("DATE_FORMAT({0},'%Y-%m-%d')", userModel.createDate)).from(userModel).fetchOne();
//
//        return null;
//    }
//    @Override
//    public UserModel findByNickName(String nickName) {
//        return userRepository.findByNickName(nickName);//
//    }
//}
